package main
import (
	"fmt"
)

// 声明一个接口
// 接口不能包含任何变量
// 数据类型也可以使用接口
// 接口的方法都是没有实现的方法 体现了高内聚低耦合
// 使用接口 类中必须存在接口中的方法&&类中的方法名===接口的方法名
type USB interface {
	Start()
	Stop()
}

type Phone struct {

}
func (p Phone) Start() {
	fmt.Println("手机开始工作。。。")
}
func (p Phone) Stop() {
	fmt.Println("手机停止工作。。。")
}

type Camera struct {

}
func (c Camera) Start() {
	fmt.Println("相机开始工作。。。")
}
func (c Camera) Stop() {
	fmt.Println("相机停止工作。。。")
}

type Computer struct {

}
// 编写一个方法Working 接收一个USB接口类型
func (c Computer) Working(usb USB) {
	usb.Start()
	usb.Stop()
}

// 空接口 类似与泛型 可以接收任何数据类型
type T interface {}

func main() {
	computer := Computer{}
	phone := Phone{}
	camera := Camera{}

	computer.Working(phone)
	computer.Working(camera)
	fmt.Println("--------------")
	// 空接口 类似与泛型 可以接收任何数据类型
	var num1 float64 = 8.8
	var a T = num1
	fmt.Println(a)

	var str string = "abc"
	var b interface{} = str
	fmt.Println(b)
}